scmRTOS 4.0 release
4 квітня (2012.04.04) нарешті вийшла «офіційна» версія 4.0 операційної системи scmRTOS.
Попередню версію по виправленні відомих помилок збережено в гілці scmrtos/tags/3.11.
Нова версія зафіксована в scmrtos/tags/4.00 та продовжує розвиватися в scmrtos/trunk.
Що нового в scmRTOS 4.0 у порівнянні з версією 3.11:
- Замість типів
byte
,word
,dword
використовуються типиuint8_t
,uint16_t
,uint32_t
зstdint.h
. В деяких випадках використовуються типи на зразокuint_fast8_t
для оптимальної компіляції на різних архітектурах. Файлstdint.h
включено вscmRTOS.h
. - Змінено угоду про іменування функцій та змінних. Ця зміна вимагає деяких дій при переході на нову версію (див. нижче).
- Змінено структуру каталогів прикладів репозиторію та імен архівів на сторінці завантаження scmRTOS. Тепер використовується «шлях»
архітектура/компілятор/лінійка_мікроконтролерів
. - Додано можливість перезапустити процес.
- Додано підтримку профілювання та зневадження програм:
- визначення залишку вільного місця на стеках процесів,
- вимірювання часу роботи процесів,
- можливість дізнатися адресу об’єкту синхронізації, якого очікує процес.
- Додано новий приклад 4-Debug для демонстрації частини цих можливостей.
- Додано клас TKernelAgent — механізм розширень ОС (власне, профілювання і зроблено як приклад такого розширення).
- Змінено ієрархію класів ОС. Всі сервіси ОС тепер є нащадками класу TService, який є нащадком класу TKernelAgent. Користувач може створювати власні сервіси.
- Додано порт для STM8/IAR та приклади для STM8S.
- В порт CortexM3/GCC додано приклади 1-EventFlag та 4-Debug для мікроконтролерів LPC17XX.
- В портах AVR/GCC та AVR/IAR для мікроконтролерів megaAVR додано підтримку кристалів з пам’яттю програм більше 128 кілобайт (ATmega256x).
- З порта CortexM3/IAR прибрано приклади для LPC17XX (за браком бажаючих їх підтримувати). Учасники проекту працюють якщо і з IAR, то з STM32, а якщо вже з LPC17XX, то з GCC.
- Порт Fujitsu MB91 більше не підтримується.
- Порт ARM7/IAR на даний момент не підтримуються. Його, як і порт Fujitsu MB91, залишено в гілці 3.11, але вони не увійшли до 4.0 та поточноі гілки розробки.
Для полегшення переходу з scmRTOS 3.xx на 4.xx створено файл scmRTOS_310_compat.h
, який робить синоніми для старих типів даних з використанням типів з stdint.h
та вмикає в джерельних текстах ОС режим сумісності. В цьому режимі створюються inline функції-адаптери двох типів:
- Для коду користувача: адаптери переходу від старих до нових імен, наприклад, від
Sleep()
доsleep()
в новому коді ОС. - Для коду ОС: адаптери переходу від нових до старих імен, наприклад, від
system_timer_user_hook()
доSystemTimerUserHook()
в старому коді користувача.
Завдяки функціям-адаптерам ядра в старому коді слід лише замінити імена функцій процесів Exec()
на еxec()
і старий проект продовжуватиме працювати.
Файл scmRTOS_310_compat.h
треба включити на початку scmRTOS_CONFIG.h
проекту. Також потрібно додати визначення для двох типів — лічильника системних тіків ОС tick_count_t
та типу часу таймауту timeout_t
.
Як зразок такого переходу можна подивтися приклади 3-Channel в портах AVR/GCC/MEGA та AVR/IAR/MEGA.
З наявних недоліків — на wiki проекту відсутні сторінки для STM8. Це моя провина і я її (поступово) виправлятиму.
Дайте якщо є у кого, готовій проект під AVR-gcc із scmRTOSv4.0 а то я своє то щось підправив, а у мене задачі не виконуються. Буду вдячний.
Так перевірені приклади є разом з самою scmRTOS, там можна взяти. Вони прості, але головне показують.
Докладне пояснення 1-EventFlag робилося під 3.10, зі старшими можуть не збиратися, але головне — що і як відбувається в системі — не помінялося.
Хе. Вот бы разработать аналог позикс для микроконтроллерных ОС. Стандартизовать всякие EnterCritical, Sleep, Yield, timeout_t. Остальные примитивы тоже бы неплохо стандартизовать, но эти по прикладной программе (не драйверу, который скорее всего всё равно будет привязан к ОС) встречаются весьма часто. Хочется попробовать другую РТОС – приходится бежать по тексту и подставлять другие имена :).
Така думка вже виникала (мабуть, вона давно в повітрі і її вітром то в одну голову, то в іншу заносить ;-)).
Але для цього не вистачає знань, бо треба ж проаналізувати (а для цього непогано покористуватися) кілька різних «відносно легких» мікроконтролерних ОС.
І не вистачає часу для компенсації нестачі знань.
Думаю, все таки набагато важливішим було б бажання авторів цих легких ОС цим зайнятись.
Згоден. «Ну хоч не всіх, хоча б половини»…
Вище я писав про себе.
Якесь таке бажання було ворухнулося ще коли я надавав консультації по портуванню scmRTOS 1.0 на avr-gcc (пізніше у 2.0 такого порта не було, а на 3.0 я вже робив сам). Але зрозумів, що замало досвіду і навіть просто посидіти/почитати документацію на інші легкі ОС мало.